import { Schema, model } from 'mongoose';

export interface IScript {
  _id?: Schema.Types.ObjectId;
  appId: Schema.Types.ObjectId; // 关联的应用ID
  command: string; // 命令
  commandParams: Array<{
    name: string;
    value: string;
  }>;
  commandValue: string;
  createdAt?: Date; // 创建时间
  name: string; // 脚本名称
  remark?: string; // 脚本描述
  repoId: Schema.Types.ObjectId; // 关联的仓库ID
  updatedAt?: Date; // 更新时间
}

export const ScriptModel = model<IScript>(
  'Script',
  new Schema<IScript>(
    {
      // 关联的应用ID
      appId: {
        ref: 'App',
        required: true,
        type: Schema.Types.ObjectId,
      },
      // 命令类型
      command: {
        required: true,
        type: String,
      },
      // 命令参数数组
      commandParams: {
        default: [],
        type: [
          new Schema(
            {
              name: {
                required: true,
                type: String,
              },
              // 参数值
              value: {
                required: true,
                type: String,
              },
            },
            // 不为子文档生成_id
            { _id: false },
          ),
        ],
      },
      commandValue: {
        required: true,
        type: String,
      },
      // 脚本名称
      name: {
        required: true,
        trim: true,
        type: String,
      },
      // 脚本描述
      remark: {
        default: '',
        trim: true,
        type: String,
      },
      // 关联的仓库ID
      repoId: {
        ref: 'RepoModel',
        required: true,
        type: Schema.Types.ObjectId,
      },
    },
    {
      // 自动添加createdAt和updatedAt时间戳
      timestamps: true,
      toObject: {
        getters: true, // 包含虚拟字段
        minimize: false, // 包含空对象
        versionKey: false, // 不包含 __v 版本键
        virtuals: true, // 包含虚拟属性
      },
    },
  ),
);
